在NuGet還沒有出來前要在專案中加入組件的相關Config是挺麻煩的,要看著文件或範例來一段一段複制貼上Config,說真的不是很方便,但是NuGet有提供Config轉換,會把需要設定的Config合併到專案的Config中,可以省下不少設定時間,這篇就來跟大家說在建立Package時如何加入Config轉換檔。
同步更新於:http://www.dotblogs.com.tw/wadehuang36/archive/2011/10/16/nuget-config-transform.aspx
在NuGet還沒有出來前要在專案中加入組件的相關Config是挺麻煩的,要看著文件或範例來一段一段複制貼上Config,說真的不是很方便,但是NuGet有提供Config轉換,會把需要設定的Config合併到專案的Config中,可以省下不少設定時間,這篇就來跟大家說在建立Package時如何加入Config轉換檔。
建立Config轉換檔
準備一個僅安裝時需要的Config檔,如下範列是我在製作Common.Logging.Elmah時所有的設定。
<configuration>
<configSections>
<sectionGroup name="common">
<section name="logging"t ype="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
</sectionGroup>
</configSections>
<common>
<logging>
<factoryAdapter type="Common.Logging.Elmah.ElmahLoggerFactoryAdapter, Common.Logging.Elmah">
<arg key="Level" value="all"/>
</factoryAdapter>
</logging>
</common>
</configuration>
NuGet的Config檔的轉化檔在設計上很簡單,就跟平常在設定Config一樣一樣,相對的它沒有辦法做太多事,只能以Xml的標籤,一個一個比對element的階層與內容,沒有完全相同的element就新增,如果element相同,但有一個attribute相同會合併設定,完全相同就略過,以下面的例子為例:
App.Config內容
<configuration>
<appSettings>
<add key="SetA" />
<add key="SetB" value="App.Coinfg" />
<add key="SetC" value="Same" />
</appSettings>
</configuration>
App.config.transform(transform為轉換檔的副檔名)內容
<configuration>
<appSettings>
<add key="SetA" vaule="Transformation" />
<add key="SetB" value="Transformation" />
<add key="SetC" value="Same" />
<add key="SetD" value="Transformation" />
</appSettings>
</configuration>
合併後的結果
<configuration> //完全一樣,不處理
<appsettings> //完全一樣,不處理
<add key="SetA" value="Transformation" /> //一個Attribute相同,合併
<add key="SetB" value="App.Coinfg"/> //雖然有一個Attribute相同,但另一個Attribute不同,不處理
<add key="SetB" value="Transformation" /> //雖然有一個Attribute相同,但另一個Attribute不同,新增
<add key="SetC" value="Same" /> //完全一樣,不處理
<add key="SetD" value="Transformation" /> //沒有,新增
</appsettings>
</configuration>
如果要寫某種情境下才新增設定,那就不能用Config轉化檔,可能要在NuGet的PowerShell安裝檔中寫Code來處理。
加入Package中
轉換檔的副檔名是.transform,只要將準備好的config的檔名後方加上.transform及可,如果是要轉換web.config,就建立web.config.transform,如果是要轉換app.config,就建立app.config.transform,並加入Package中的Content下,加入的方法有:
--NuGet.exe (可參考NuGet系列-自動發佈)
--NuGet Package Explorer (可參考NuGet系列-使用NuGet Package Explorer建立nupkg檔)
如果組件可以用在Web或Windows Form,可以同時準備web.config.transform、app.config.transform,這二個檔案,當安裝Package時,會比對目錄下(放在Content下相對於專案根目錄)有沒有扣除.transform檔名的檔案,如果有才做轉換,如果沒有不做轉換也不會在專案中增加檔案。
安裝與移除Package
有Config專案的Package在安裝上沒有不一樣,使用平常的安裝方法及可,但在移除上可能要注意,因為NuGet Config轉換除了安裝時會合供,移除時會刪除合併,不過只有跟轉換檔相同的element才會刪除,因為安裝後通常會改設定值,應該有些比對不成功,會刪不乾清。